package ch02
{
	/**
	 * 群落
	 * 我们弄了一大堆转向机车，分散于舞台上，添加于数组中。每一帧都遍历数组，让它们执
	   行群落行为，然后更新它们的位置。虽然看上去每个机车都是独自在行驶，但通过对其它机车
	   的了解，慢慢组成了队伍。尽量多改改各项变量和机车数量，以更好的理解工作机制。
	   
	   再想想数组的检测，要为每辆机车跑次循环，是不是很没效率？作为处理数组的优化方
	   案，可能你已经想到采用二重循环甚至第一章讲的网格检测法。但是这么做就要 把群落行为的
	   一些代码移出转向机车类，要么直接写在文档类中，要么最好是写一个群落管理器类，这就当
	   回家作业留给各位啦。
	 * @author jianping.shenjp
	 */
	import ch02.com.foed.SteeredVehicle;
	import ch02.com.foed.Vector2D;
	import ch02.com.foed.Vehicle;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;

	public class FlockTest extends Sprite
	{
		private var _vehicles:Array;
		private var _numVehicles:int = 30;

		public function FlockTest()
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			_vehicles = new Array();
			for (var i:int = 0; i < _numVehicles; i++)
			{
				var vehicle:SteeredVehicle = new SteeredVehicle();
				vehicle.position = new Vector2D(Math.random() * stage.stageWidth, Math.random() * stage.stageHeight);
				vehicle.velocity = new Vector2D(Math.random() * 20 - 10, Math.random() * 20 - 10);
				vehicle.edgeBehavior = Vehicle.BOUNCE;
				_vehicles.push(vehicle);
				addChild(vehicle);
			}
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}

		private function onEnterFrame(event:Event):void
		{
			for (var i:int = 0; i < _numVehicles; i++)
			{
				_vehicles[i].flock(_vehicles);
				_vehicles[i].update();
			}
		}
	}
}